# -*- coding: utf-8 -*-
import requests
import json

# --- 1. 配置区域 ---
# 从 curl 命令中提取的所有参数都定义在这里，方便修改

API_URL = 'http://172.0.54.122:1040/v1/chat/completions'
API_KEY = 'PTGAPLP7DRREGE4USUJX'
SECRET_KEY = 'TxoGsncIvtPXpyuNOz7gA0ObjrO04ks4UuLBn2bx'

# 请求体中的可变参数
MODEL_NAME = 'qwen25_vl'
VIDEO_URL_ON_SERVER = '/data/obs/in_video/2025-05-28-16-34.mp4'
def create_prompt(features):
    """根据特征列表构建一个用于分类和分析的详细Prompt"""
    prompt_parts = [
        "你是一个煤矿安全生产的专家，请仔细观察视频内容，并根据下面提供的工序特征定义，判断视频中正在进行哪一项工序，并对视频内容进行简要分析。",
        "请只识别一项最匹配的工序。",
        "\n--- 工序特征定义 ---"
    ]
    for item in features:
        part = f"\n工序: {item['工序']}\n特征:\n"
        for desc in item['工序特征']:
            part += f"- {desc}\n"
        prompt_parts.append(part.strip())
    prompt_parts.append("\n--- 任务要求 ---")
    prompt_parts.append("如果视频内容不包括所有已定义的工序特征，请将工序识别为'其他'。")
    prompt_parts.append('请严格按照以下JSON格式返回你的判断结果，不要包含任何解释或其他多余的文字：\n{"工序": "识别出的工序名称", "分析": "对视频内容的简要分析"}')
    return "\n".join(prompt_parts)

filepath = './feature.json'
with open(filepath, 'r', encoding='utf-8') as f:
    features = json.load(f)

prompt = create_prompt(features)

####################
#prompt = '描述视频的内容'
####################
def main():
    """
    主函数，用于发送API请求并处理响应。
    """
    
    # --- 2. 构建请求头 ---
    # 根据 curl 的 --header 参数创建字典
    headers = {
        'Content-Type': 'application/json',
        'X-API-Key': API_KEY,
        'X-Secret-Key': SECRET_KEY
    }
    
    # --- 3. 构建请求体 (Payload) ---
    # 根据 curl 的 --data 参数创建字典
    payload = {
        "model": MODEL_NAME,
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "video_url",
                        "video_url": VIDEO_URL_ON_SERVER
                    },
                    {
                        "type": "text",
                        "text": prompt
                    }
                ]
            }
        ],
        "parameters": {
        "vl_high_resolution_images": "true"
        },
        "max_tokens": 16384,
        "repetition_penalty": 1.00,
        "temperature": 0.01
    }

    print(f"--- 准备发送请求到: {API_URL} ---")
    print(f"--- 使用视频: {VIDEO_URL_ON_SERVER} ---")
    
    try:
        # --- 4. 发送 POST 请求 ---
        # 使用 requests.post 发送请求
        # - headers 参数传递请求头
        # - json 参数会自动将Python字典转换为JSON字符串，并设置正确的Content-Type
        # - timeout 参数设置超时时间，防止无限期等待
        response = requests.post(API_URL, headers=headers, json=payload, timeout=60)
        
        # --- 5. 处理响应 ---
        # 检查响应状态码，如果不是 2xx，则会引发HTTPError异常
        response.raise_for_status()
        
        # 如果请求成功
        print(f"\n--- 请求成功! 状态码: {response.status_code} ---")
        print("--- 模型返回内容: ---")
        
        # 将返回的JSON内容格式化后打印出来，方便阅读
        # ensure_ascii=False 确保中文字符能正确显示
        response_data = response.json()
        data = response_data
        data1 = data['choices']
        data2 = data1[0]
        data3 = data2['message']['content']
        print(data3)

    # --- 6. 异常处理 ---
    except requests.exceptions.HTTPError as errh:
        # 处理HTTP错误 (如 404, 500 等)
        print(f"\n!!! HTTP 错误: {errh}")
        print(f"--- 响应状态码: {errh.response.status_code} ---")
        print(f"--- 响应内容: ---\n{errh.response.text}")
    except requests.exceptions.ConnectionError as errc:
        # 处理连接错误
        print(f"\n!!! 连接错误: {errc}")
        print("请检查API服务器地址是否正确，以及网络连接是否正常。")
    except requests.exceptions.Timeout as errt:
        # 处理请求超时
        print(f"\n!!! 请求超时: {errt}")
        print("服务器在规定时间内没有响应，请稍后重试或增加超时时间。")
    except requests.exceptions.RequestException as err:
        # 处理其他所有 requests 相关的异常
        print(f"\n!!! 请求发生未知错误: {err}")

if __name__ == "__main__":
    main()